<?php
class Arm_Form_Builder_Plugin_Select extends Arm_Form_Builder_Plugin_Abstract
{    
    /**
     * Вернет тело метода
     * 
     * @return string
     */
    public function getBody()
    {
        $data = $this->getData();
        $serarsh = array();
        $replace = array();
        $serarsh[] = '#name#';
        $replace[] = $this->getNameElement();
        
        $serarsh[] = '#method#';
        $replace[] = $this->getNameMethod();
        
        $valueDefault = $data['DEFAULT'];
        $serarsh[] = '#valueDefault#';
        $replace[] = $valueDefault;
        
        $lists = $this->_getStringArray($data['DATA_TYPE']);
        $serarsh[] = '#lists#';
        $replace[] = $lists;
        
        $str  = '';
        $str .= '$lists = #lists#' . "\n";
        $str .= '$#method# = new Zend_Form_Element_Select(\'#name#\');' . "\n";
        $str .= '$#method#->setLabel(Arm_Translate::_(\'Выбирите\'));'."\n";
        $str .= '$#method#->setDescription(Arm_Translate::_(\'Описание, ведите здесь\'));'."\n";
        $str .= '$#method#->setMultiOptions($lists);' . "\n";    
            if($valueDefault !== null) {
                $str .= '$#method#->setValue(\'#valueDefault#\');' . "\n";
            } else {
                $str .= '//$#method#->setValue(\'\');' . "\n";
            }
        $str .= '$#method#->setRequired(true);' . "\n";
        $str .= 'return $#method#;';
        $str  = str_replace($serarsh, $replace, $str);
        return $str;
    }
    
    
    /**
     * Формирует строку, дамп масива.
     * @param string $string
     * @return string
     */
    public function _getStringArray($string)
    {
       $result = array();
       preg_match('~\((.+)\)~', $string, $result);
       $array = explode(',', $result[1]);
       $res = 'array(' . "\n";
            foreach ($array as $k=>$v) {
                $v = trim($v, '\'" ');
                $res .= str_repeat(' ', 16) . "'$v'=>'Label_$v'," . "\n";
            }
       $res .= str_repeat(' ', 15) . ');' . "\n";
       return $res;
    }
   
    
    /**
     * Прототип метода который создается.
     */
    private function _prototype($label, $description=null, $lists=array(), $value = null)
    {
        /*@var $element Zend_Form_Element_Select */
        $element = $this->_getZendFormElement('select');
        $element->setName($name);
        $element->setRequired(true);
        $element->setAllowEmpty(false);
            if($label === null) {
                $label = Arm_Translate::_('Выберите');
            }
        $element->setLabel($label);
            if($description !== null) {
                $element->setDescription($description);
            }
            if ($lists === array()) {
                $lists = array('value1'=>'описание1');
            }
            if($value === null) {
                $value = 'value1';
            }
         $element->setMultiOptions($lists);
         $element->setValue($value);
        return $element;  
    }
    
     /**
     * Вернет коментарий к методу
     * 
     * @return Zend_CodeGenerator_Php_Docblock|array|string
     */
    public function getDocblock()
    {
        $str =
      '
#idTableField#
Возвращает элемент формы Zend_Form_Element_Select с именем "#name#".
       
@todo Метод автоматически сгенерирован системой, подкорректируйте его. 
Задайте Типовое значение label для текущего модуля внутри метода.
       
@return Zend_Form_Element_Select
';
        $data = $this->getData();
        $serarsh = array();
        $replace = array();
        $serarsh[] = '#name#';
        $replace[] = $this->getNameElement();
        
        $serarsh[] = '#idTableField#';
        $replace[] = $this->_getStrIdFieldTable();
        
      return str_replace($serarsh, $replace, $str);
    }
    
}